Volta を使って、ローカル開発環境(M1 Mac)と GitHub Actions ランナーの Node および npm バージョンを揃えてみた
こんにちは、製造ビジネステクノロジー部の若槻です。
Volta は Rust 製の JavaScript ツールマネージャーで、Node ランタイムやパッケージマネージャーのバージョンをプロジェクトごとに簡単に管理可能となります。
今回は、Volta を使って、ローカル開発環境(M1 Mac)と GitHub Actions ランナーの Node および npm のバージョンを揃える方法を紹介します。
やってみた
ローカル開発環境の仕様確認
$ sw_vers
ProductName: macOS
ProductVersion: 14.5
BuildVersion: 23F79
$ sysctl -n machdep.cpu.brand_string
Apple M1
$ node --version
v20.9.0
$ npm --version
10.2.4
ローカル開発環境(M1 Mac)に Volta を導入する
Volta のインストール
curl https://get.volta.sh | bash
PATH の設定
export PATH="$HOME/.volta/bin:$PATH"
source ~/.zshrc # or ~/.bashrc
必要に応じて、シェルの設定ファイルを変更してください。
echo 'export PATH="$HOME/.volta/bin:$PATH"' >> ~/.zshrc # or ~/.bashrc
package.json に Volta の設定を追加する
package.json
が作成されている開発プロジェクトに移動します。
volta pin
コマンドを固定したいバージョンを指定して実行します。
volta pin node@20.16.0
volta pin npm@10.1.0
package.json
に次のような設定が追加されます。
{
"volta": {
"node": "20.16.0",
"npm": "10.1.0"
}
}
今回は Node および npm のバージョンを固定しましたが、いずれか一方を固定することも可能です。
Volta の設定に ローカル開発環境の Node および npm バージョンを揃える
Volta を導入している他の開発者が Node を使用する際に、package.json
に記載された Node および npm バージョンが使用されるようになります。
$ node --version
v20.9.0
$ npm --version
10.1.0
この時、Volta で初めて使用するバージョンの場合、バイナリがダウンロードされます。
これで、開発メンバーのローカル開発環境間で Node および npm バージョンを揃えることが可能となります。
Volta の設定に GitHub Actions ランナーの Node および npm バージョンを揃える
Volta 公式が公開しているアクションを使用することで、GitHub Actions ワークフローで Volta の設定をもとに Node ランタイムやパッケージマネージャーのバージョンを揃えることができます。
GitHub Actions ワークフローのサンプル
name: Manual Test
on: workflow_dispatch
jobs:
create_json:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Volta Action
uses: volta-cli/action@v4
- name: Version Check
run: |
node --version
npm --version
動作確認
ワークフローを実行すると、Node ランタイムおよび npm のバージョンが package.json
に記載されたバージョン(v20.9.0 および 10.1.0)に揃えられていることを確認できました。
setup-node アクションを使うと、Node バージョンのみが Volta の設定に従って揃えられる
GitHub 公式の setup-node
アクションを使用した場合は、Volta の設定が反映されるのは Node バージョンのみ となるので注意が必要です。
次のように node-version-file
プロパティで package.json
を指定して使用します。
name: Manual Test 2
on: workflow_dispatch
jobs:
create_json:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v4
with:
# Volta の設定が反映されるのは Node バージョンのみ
node-version-file: package.json
- name: Version Check
run: |
node --version
npm --version
ワークフローを実行すると、Node ランタイムのみが package.json
に記載されたバージョン(v20.9.0)に揃えられています。npm は 10.1.0 ではなく 10.8.0 が使用されています。
Volta を使用している環境で setup-node
アクションを使いたい場合は留意しましょう。
おわりに
Volta を使って、ローカル開発環境(M1 Mac)と GitHub Actions ランナーの Node および npm バージョンを揃えてみました。
Node および npm の両者のバージョンを単一のツールでとても簡単に統一することが出来ました。導入も簡単なので、ぜひ試してみてください。
以上